package cn.aws360.boot.system.biz.service;

import cn.aws360.boot.data.api.pojo.request.PageQuery;
import cn.aws360.boot.data.api.pojo.response.PageResult;
import cn.aws360.boot.system.api.pojo.request.SysFileQuery;
import cn.aws360.boot.system.api.pojo.request.SysFileWrite;
import cn.aws360.boot.system.api.pojo.response.SysFileModel;
import cn.aws360.boot.system.biz.domain.SysFile;
import com.baomidou.mybatisplus.extension.service.IService;
import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.util.List;

/**
 * @author junnan
 */
public interface SysFileService extends IService<SysFile> {

    /**
     * 新增文件
     *
     * @param sysFileWrite 新增文件参数
     * @return 是否成功
     */
    Boolean add(SysFileWrite sysFileWrite);

    /**
     * 删除文件
     *
     * @param ids 删除文件 ids
     * @return 是否成功
     */
    Boolean remove(String ids);

    /**
     * 查询文件详情
     *
     * @param id 查询文件 id
     * @return SysFileModel
     */
    SysFileModel detail(Integer id);

    /**
     * 查询文件列表
     *
     * @param sysFileQuery 查询文件参数
     * @return List<SysFileModel>
     */
    List<SysFileModel> findList(SysFileQuery sysFileQuery);

    /**
     * 查询文件分页
     *
     * @param sysFileQuery 查询文件参数
     * @param pageQuery    查询分页参数
     * @return PageResult<SysFileModel>
     */
    PageResult<SysFileModel> findPage(SysFileQuery sysFileQuery, PageQuery pageQuery);

    /**
     * 文件上传
     *
     * @param bucket    容器名称
     * @param directory 文件目录
     * @param file      文件对象
     * @return SysFileModel
     */
    SysFileModel upload(String bucket, String directory, File file);

    /**
     * 文件上传
     *
     * @param bucket        容器名称
     * @param directory     文件目录
     * @param multipartFile 文件对象
     * @return SysFileModel
     */
    SysFileModel upload(String bucket, String directory, MultipartFile multipartFile);

    /**
     * 文件下载
     *
     * @param id 查询文件 id
     */
    void download(Integer id);

}
